package org.remote.game;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.bean.ActivityInfo;
import org.bean.DictionariesDTO;
import org.bean.DungeonTeamMember;
import org.bean.FriendInfo;
import org.bean.FunctionSwitchDTO;
import org.bean.InterceptInfoDTO;
import org.bean.NoticeDTO;
import org.bean.PlayerInfo;
import org.bean.SourceChatMsg;
import org.bean.StoreInfo;

import com.sojoys.artifact.exception.AbstractLogicModelException;
import org.game.log.dsp.GoodsDsp;

/**
 * @author : DengYing
 * @CreateDate : 2017年8月14日 下午3:10:25
 * @Description ：游戏服务器
 */
public interface RemoteGameServer {
	
	/** 登陆服务器启动 */
	void loginServerStart();
	
	/** 社交服务器启动 */
	void socialServerStart();
	
	
	
	
	/** 通知聊天 */
	public void notifyChat(SourceChatMsg msg,Set<Integer> targetPids) throws AbstractLogicModelException;
	
	/** 通知好友信息 */
	public void notifyFriendInfos(Map<Integer, List<FriendInfo>> info,Map<Object, Object> ext) throws AbstractLogicModelException;

	void fightOver(int pid,int fightResult);
	
	public byte[] getTargetPlayerInfo(int targetPid)  throws AbstractLogicModelException;
	
	
	
	
	/** 同步动态商品信息 */
	public void syncDynamicCommodity(List<Map> added,List<Map> shelf) throws AbstractLogicModelException;
	
	/** 获取助战英雄信息 */
	byte[] getHelpHeroInfo(int playerId, int heroCid)throws AbstractLogicModelException;

	/** 通知有新队员进入 */
	void noticeNewMemberJoin(List<Integer>pidList, DungeonTeamMember newMember);

	void noticeChangeReadyState(List<Integer>pidList, int pid, boolean state);

	/**
	 * 增加拦截信息
	 */
	void noticeIntercept(List<InterceptInfoDTO> list);

	/** 通知字典 */
	void noticeDict(List<DictionariesDTO> list);
	
	/** 通知开关 */
	void noticeSwitch(List<FunctionSwitchDTO> list);
	
	/** 通知商城 */
	public void noticeStore(StoreInfo storeInfo)  throws AbstractLogicModelException;
	
	/** 通知活动 */
	void noticeActivity(List<ActivityInfo> list);
	
	/** 通知公告 */
    void noticeNotice(List<NoticeDTO> list);
	
	/**
	 * 新增通知
	 */
	void addNotice(List<NoticeDTO> noticeList);

	/**
     * 修改通知
     */
    void modifyNotice(List<NoticeDTO> noticeList);
	
	/**
	 * 移除通知
	 */
	void removeNotice(List<Integer> noticeIdList);

	/**
	 * 广播跑马灯
	 */
	void broadcastMarqueeNotice(List<Integer> noticeIdList);

	/**
	 * 发送GM邮件
	 */
	void sendGMMail(String uuid,int type, String title, String body, Map<Integer, Integer> item, Map bodyParam, List<Integer> playerIdList);

	/**
	 * 查询GM邮件
	 * @param pid 玩家id
	 * @param startTime 开始时间
	 * @param endTime 截止时间
	 */
	List<String> queryGMMail(int pid, long startTime, long endTime);

	/**
	 * 操作服务器状态
	 * @param state 状态
	 */
	void operateServerState(int state);

	/**
	 * 获取游戏数据
	 * @param className 类名
	 * @param methodName 方法名
	 */
	Object getGameData(String className,String methodName,Object id);
	
    /**
     * 支付成功通知
     *
     * @param playerId 玩家id
     * @param orderId  订单id
     * @param goodsId  商品id
     */
    boolean noticePaymentSuccess(int playerId, String orderId, int goodsId);

    void newDay(Date date);
    
    /**
     * 微信积分商城兑换
     * 
     * @param orderId
     * @param playerId
     * @param prizeid
     * @param time
     */
    int wechatShopExchange(String orderId, int playerId, int prizeid, int num, int secTime);
    
    PlayerInfo getPlayerInfo(int pid);
    
    /**
     * 重载脚本
     * @param scriptName 脚本类名（带包名）
     */
    void reloadScript(String scriptName);

	/**
	 * 消耗玩家物品
	 */
	void changeItem(int pid, Map<Integer, Integer> costMap, GoodsDsp dsp,boolean add);
}
